package org.yuanqiframework.yuanqi.core.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtils {
    public static String generate(String secretKey, Map<String, Object> claims) {
        // 使用给定的密钥和声明生成一个JWT
        return Jwts.builder()
                // 设置JWT的主题
                .setSubject("auth java")
                // 设置JWT的声明
                .setClaims(claims)
                // 设置JWT的签发时间
                .setIssuedAt(new Date())
                // 设置JWT的签发者
                .setIssuer("SYSTEM")
                // 使用HS256算法和给定的密钥对JWT进行签名
                .signWith(SignatureAlgorithm.HS256, secretKey)
                // 将JWT压缩成一个字符串
                .compact();
    }

    /**
     * 获取数据
     *
     * @param secretKey
     * @param claimsJws
     * @return
     */
    public static Map<String, Object> getData(String secretKey, String claimsJws) {
        return Jwts.parser()
                .setSigningKey(secretKey)
                .parseClaimsJws(claimsJws)
                .getBody();
    }

    /**
     * 是否匹配
     *
     * @param secretKey
     * @param claimsJws
     * @return
     */
    public static boolean match(String secretKey, String claimsJws) {
        boolean flag = true;
        try {
            Jwts.parser()
                    .setSigningKey(secretKey)
                    .parseClaimsJws(claimsJws);
        } catch (Exception e) {
            e.printStackTrace();
            flag = false;
        }
        return flag;
    }
}
